;-----------------------------------------------------------------------------
;   spr_mtx3.src -- SPR ライブラリ MTX3 モジュール
;   Copyright(c) 1994 SEGA
;   Written by K.M on 1993-12-14 Ver.0.80
;   Updated by H.E on 1994-02-15 Ver.0.80
;   Updated by T.S on 1994-02-15 Ver.0.80
;
;   このライブラリはスプライト３Ｄ表示のマトリックス演算ルーチンの高速版で以下
;   のルーチンのを含む。
;   高速版にするため、 spr_mtx3.c をＳＨＣコンパイラにて一旦アセンブラソース出
;   力し、命令の最適化を行った。
;
;   _sp3InitialMatrix       -  マトリックス演算処理モジュールの初期化処理
;   _sp3ViewCoordMatrix     -  カレントマトリックスに視点座標系への変換マトリ
;                              ックスをセット
;   _sp3ClearCurrentMatrix  -  カレントマトリックスのクリア
;   _sp3ViewPointAngle      -  ビューポイントの座標とアングルを設定する
;   _sp3LightAngle          -  光源のアングルを設定する
;   _sp3PushMatrix          -  カレントマトリックスのプッシュ
;   _sp3PopMatrix           -  カレントマトリックスのポップ
;   _sp3RotateMatrixX       -  カレントマトリックスのＸ回転
;   _sp3RotateMatrixY       -  カレントマトリックスのＹ回転
;   _sp3RotateMatrixZ       -  カレントマトリックスのＺ回転
;   _sp3ReversMatrixZ       -  カレントマトリックスのＺ値符号反転
;   _sp3MoveMatrix          -  カレントマトリックスの平行移動
;   _sp3SurfaceBright       -  面データ群の輝度計算
;   _sp3CoordTrans          -  頂点データ群の座標変換
;   _sp3CoordTransSub       -  １頂点データの座標変換
;   _sp3VertBright          -  頂点データ群の輝度計算
;   _sp3NormalTrans         -  法線の座標変換
;   _sp3ComputeBrightness   -  １データの輝度計算
;
;   このライブラリを使用するには次のインクルードファイルを定義する必要がある。
;
;   #include "sega_xpt.h"
;   #include "spr_mtx3.h"
;
;-----------------------------------------------------------------------------
;
          .IMPORT     _SPR_FTOI
          .IMPORT     _SPR_MULF
          .IMPORT     _fxsin
          .IMPORT     _fxcos
          .EXPORT     _sp3currentMatrix
          .EXPORT     _sp3InitialMatrix
          .EXPORT     _sp3ClearCurrentMatrix
          .EXPORT     _sp3ViewPointAngle
          .EXPORT     _sp3LightAngle
          .EXPORT     _sp3ViewCoordMatrix
          .EXPORT     _sp3PushMatrix
          .EXPORT     _sp3PopMatrix
          .EXPORT     _sp3RotateMatrixX
          .EXPORT     _sp3RotateMatrixY
          .EXPORT     _sp3RotateMatrixZ
          .EXPORT     _sp3ReversMatrixZ
          .EXPORT     _sp3MoveMatrix
          .EXPORT     _sp3SurfaceBright
          .EXPORT     _sp3CoordTrans
          .EXPORT     _sp3VertBright
          .EXPORT     _sp3CoordTransSub
          .EXPORT     _sp3NormalTrans
          .EXPORT     _sp3ComputeBrightness
	.MACRO	CSSC P,Q
	CLRMAC
	ADD	#\P,R7
	MAC.L	@R7+,@R5+
	ADD	#\Q-\P-4,R7
	MAC.L	@R7+,@R5+
	ADD	#-\Q+\P-4,R7
	STS	MACH,R1
	STS	MACL,R0
	CLRMAC
	MAC.L	@R7+,@R5+
	ADD	#\Q-\P-4,R7
	MAC.L	@R7+,@R5+
	ADD	#-\Q-4,R7
	XTRCT	R1,R0
	MOV.L	R0,@(\P,R7)
	ADD	#-16,R5
	STS	MACH,R3
	STS	MACL,R2
	XTRCT	R3,R2
	MOV.L	R2,@(\Q,R7)
	.ENDM

	.MACRO	M123 P
	CLRMAC
	ADD	#\P,R7
	MAC.L	@R7+,@R5+
	MAC.L	@R7+,@R5+
	MAC.L	@R7+,@R5+
	ADD	#-12,R5
	MOV.L	@R7,R2
	ADD	#-\P-12,R7
	STS	MACH,R1
	STS	MACL,R0
	XTRCT	R1,R0
	ADD	R2,R0
	MOV.L	R0,@(\P+12,R7)
	.ENDM

	.MACRO	T123 P
	CLRMAC
	ADD	#\P,R7
	MAC.L	@R7+,@R4+
	MAC.L	@R7+,@R4+
	MAC.L	@R7+,@R4+
	ADD	#-12,R4
	MOV.L	@R7,R2
	ADD	#-\P-12,R7
	STS	MACH,R1
	STS	MACL,R0
	XTRCT	R1,R0
	ADD	R2,R0
	MOV.L	R0,@R5
	ADD	#4,R5
	.ENDM

	.MACRO	N123 P
	CLRMAC
	ADD	#\P,R7
	MAC.L	@R7+,@R4+
	MAC.L	@R7+,@R4+
	MAC.L	@R7+,@R4+
	ADD	#-12,R4
	ADD	#-\P-12,R7
	STS	MACH,R1
	STS	MACL,R0
	XTRCT	R1,R0
	MOV.L	R0,@R5
	ADD	#4,R5
	.ENDM

	.MACRO	PROD RP,RQ,RR
	CLRMAC
	MAC.L	@\RP+,@\RQ+
	MAC.L	@\RP+,@\RQ+
	MAC.L	@\RP+,@\RQ+
	ADD	#-12,\RP
	ADD	#-12,\RQ
	STS	MACH,R0
	STS	MACL,\RR
	XTRCT	R0,\RR
	.ENDM
          .SECTION    SEGA_P,CODE,ALIGN=4
_sp3InitialMatrix:               ; function: sp3InitialMatrix
                                 ; frame size=4
          STS.L       PR,@-R15
          MOV         #0,R3
          MOV.L       L419+2,R2
          MOV.W       R3,@R2
          MOV.L       L419+6,R3
          MOV.L       L419+10,R2
          MOV.L       R3,@R2
          BRA         _sp3ClearCurrentMatrix
          LDS.L       @R15+,PR
_sp3ViewCoordMatrix:             ; function: sp3ViewCoordMatrix
                                 ; frame size=12
          MOV.L       R14,@-R15
          MOV.L       R13,@-R15
          STS.L       PR,@-R15
          MOV.L       L419+14,R13
          MOV.L       L419+18,R14
          BSR         _sp3InitialMatrix
          NOP
          BSR         _sp3ReversMatrixZ
          NOP

          BSR         _sp3RotateMatrixZ
          MOV.L       @(8,R14),R4
          MOV.L       @(4,R14),R4
          BSR         _sp3RotateMatrixY
          NEG         R4,R4
          MOV.L       @R14,R4
          BSR         _sp3RotateMatrixX
          NEG         R4,R4

          MOV.L       @(8,R13),R6
          MOV.L       @(4,R13),R5
          MOV.L       @R13,R4
          NEG         R6,R6
          NEG         R5,R5
          BSR         _sp3MoveMatrix
          NEG         R4,R4
          MOV.L       L419+22,R5
          MOV.L       L419+26,R4
          LDS.L       @R15+,PR
          MOV.L       @R15+,R13
          BRA         _sp3NormalTrans
          MOV.L       @R15+,R14
_sp3ClearCurrentMatrix:          ; function: sp3ClearCurrentMatrix
                                 ; frame size=0
          MOV.L       L419+30,R6
          MOV.L       L419+10,R5
          MOV.L       @R5,R5
          MOV         #0,R4
L390:                             
          ADD         #1,R4
          MOV         #12,R2
          MOV.L       @R6+,R1
          EXTU.W      R4,R3
          MOV.L       R1,@R5
          CMP/GE      R2,R3
          BF/S        L390
          ADD         #4,R5
          RTS
          NOP
L419:                             
          .RES.W      1
          .DATA.L     L271
          .DATA.L     L270
          .DATA.L     _sp3currentMatrix
          .DATA.L     L276
          .DATA.L     L277
          .DATA.L     L275
          .DATA.L     L274
          .DATA.L     L279
_sp3ViewPointAngle:              ; function: sp3ViewPointAngle
                                 ; frame size=0
          MOV.L       L420+2,R7
          MOV.L       L420+6,R6
          MOV.L       @R4,R3
          MOV.L       R3,@R6
          MOV.L       @(4,R4),R2
          MOV.L       R2,@(4,R6)
          MOV.L       @(8,R4),R3
          MOV.L       R3,@(8,R6)
          MOV.L       @R5,R2
          MOV.L       R2,@R7
          MOV.L       @(4,R5),R3
          MOV.L       R3,@(4,R7)
          MOV.L       @(8,R5),R2
          RTS
          MOV.L       R2,@(8,R7)
_sp3LightAngle:                  ; function: sp3LightAngle
                                 ; frame size=8
          MOV.L       R14,@-R15
          STS.L       PR,@-R15
          MOV.L       L420+10,R14
          MOV.L       @R4,R3
          MOV.L       R3,@R14
          MOV.L       @(4,R4),R2
          MOV.L       R2,@(4,R14)
          MOV.L       @(8,R4),R3
          MOV.L       R3,@(8,R14)
          BSR         _sp3InitialMatrix
          NOP

          BSR         _sp3RotateMatrixZ
	  MOV.L       @(8,R14),R4
          BSR         _sp3RotateMatrixY
          MOV.L       @(4,R14),R4
          BSR         _sp3RotateMatrixX
          MOV.L       @R14,R4

          MOV.L       L420+14,R5
          MOV.L       L420+18,R4
          LDS.L       @R15+,PR
          BRA         _sp3NormalTrans
          MOV.L       @R15+,R14
L420:                             
          .RES.W      1
          .DATA.L     L277
          .DATA.L     L276
          .DATA.L     L273
          .DATA.L     L274
          .DATA.L     L278
_sp3PushMatrix:                  ; function: sp3PushMatrix
                                 ; frame size=0
          MOV.L       L421+2,R7
          MOV.L       L421+6,R6
          MOV.W       @R7,R5
          MOV.L       @R6,R6
          ADD         #1,R5
          MOV         R5,R3
          MOV.W       R5,@R7
          SHLL2       R3
          SHLL2       R5
          SHLL2       R3
          SHLL2       R5
          SHLL        R3
          ADD         R3,R5
          EXTS.W      R5,R5
          MOV.L       L421+10,R2
          ADD         R2,R5
          MOV         #0,R4
L393:                             
          ADD         #1,R4
          MOV         #12,R2
          MOV.L       @R6+,R1
          EXTU.W      R4,R3
          MOV.L       R1,@R5
          CMP/GE      R2,R3
          BF/S        L393
          ADD         #4,R5
          MOV.W       @R7,R2
          MOV.L       L421+10,R1
          MOV         R2,R3
          SHLL2       R2
          SHLL2       R3
          SHLL2       R2
          SHLL2       R3
          SHLL        R3
          ADD         R3,R2
          EXTS.W      R2,R2
          MOV.L       L421+6,R3
          ADD         R1,R2
          RTS
          MOV.L       R2,@R3
_sp3PopMatrix:                   ; function: sp3PopMatrix
                                 ; frame size=0
          MOV.L       L421+2,R3
          MOV.L       L421+2,R2
          MOV.W       @R3,R3
          ADD         #-1,R3
          MOV         R3,R1
          MOV.W       R3,@R2
          SHLL2       R1
          SHLL2       R3
          MOV.L       L421+10,R2
          SHLL2       R1
          SHLL2       R3
          SHLL        R1
          ADD         R1,R3
          EXTS.W      R3,R3
          MOV.L       L421+6,R1
          ADD         R2,R3
          RTS
          MOV.L       R3,@R1
L421:                             
          .RES.W      1
          .DATA.L     L271
          .DATA.L     _sp3currentMatrix
          .DATA.L     L270
_sp3RotateMatrixX:               ; function: sp3RotateMatrixX
                                 ; frame size=60
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
          MOV.L       L422+14,R3	; fxcos
          JSR         @R3
          MOV         R4,R13
	MOV.L         R0,@-R15
          MOV         R0,R12
          MOV.L       L422+10,R3	; fxsin
          JSR         @R3
          MOV         R13,R4
	MOV.L       L422+2,R7		; cur *Matx
	NEG	R0,R1
	MOV.L         R1,@-R15
	MOV.L         R0,@-R15
	MOV.L         R12,@-R15
	MOV.L       @R7,R7		; Matx
;
	MOV	R15,R5
	CSSC	4,8
	CSSC	20,24
	CSSC	36,40
          ADD         #16,R15
;
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          MOV.L       @R15+,R12
          RTS
          MOV.L       @R15+,R13
L422:                             
          .RES.W      1
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
          .DATA.L     _fxsin
          .DATA.L     _fxcos
_sp3RotateMatrixY:               ; function: sp3RotateMatrixY
                                 ; frame size=60
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
          MOV.L       L423+12,R3
          JSR         @R3
          MOV         R4,R12
	MOV.L         R0,@-R15
          MOV         R0,R13
          MOV.L       L423+8,R3
          JSR         @R3
          MOV         R12,R4
	MOV.L       L423,R7
	NEG	R0,R1
	MOV.L         R0,@-R15
	MOV.L         R1,@-R15
	MOV.L         R13,@-R15
	MOV.L       @R7,R7		; Matx
;
	MOV	R15,R5
	CSSC	0,8
	CSSC	16,24
	CSSC	32,40
          ADD         #16,R15
;
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          MOV.L       @R15+,R12
          RTS
          MOV.L       @R15+,R13
	NOP
L423:                             
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
          .DATA.L     _fxsin
          .DATA.L     _fxcos
_sp3RotateMatrixZ:               ; function: sp3RotateMatrixZ
                                 ; frame size=60
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
          MOV.L       L424+14,R3
          JSR         @R3
          MOV         R4,R12
	MOV.L         R0,@-R15
          MOV         R0,R13
          MOV.L       L424+10,R3
          JSR         @R3
          MOV         R12,R4
	MOV.L       L424+2,R7
	NEG	R0,R1
	MOV.L         R1,@-R15
	MOV.L         R0,@-R15
	MOV.L         R13,@-R15
	MOV.L       @R7,R7		; Matx
;
	MOV	R15,R5
	CSSC	0,4
	CSSC	16,20
	CSSC	32,36
          ADD         #16,R15
;
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          MOV.L       @R15+,R12
          RTS
          MOV.L       @R15+,R13
L424:                             
          .RES.W      1
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
          .DATA.L     _fxsin
          .DATA.L     _fxcos
_sp3ReversMatrixZ:               ; function: sp3ReversMatrixZ
                                 ; frame size=0
          MOV.L       L425+2,R4
          MOV.L       @R4,R4
          ADD         #8,R4
          MOV.L       @R4,R3
          NEG         R3,R3
          MOV.L       R3,@R4
;
          MOV.L       L425+2,R4
          MOV.L       @R4,R4
          ADD         #24,R4
          MOV.L       @R4,R3
          NEG         R3,R3
          MOV.L       R3,@R4
          MOV.L       L425+2,R4
          MOV.L       @R4,R4
          ADD         #40,R4
          MOV.L       @R4,R2
          NEG         R2,R2
          RTS
          MOV.L       R2,@R4
_sp3MoveMatrix:                  ; function: sp3MoveMatrix
                                 ; frame size=32
          STS.L       MACL,@-R15
          MOV.L       L425+2,R7
          MOV.L       @R7,R7		; Matx
	MOV.L	R6,@-R15
	MOV.L	R5,@-R15
	MOV.L	R4,@-R15
;
	MOV	R15,R5
	M123	0
	M123	16
	M123	32
;
	ADD	#12,R15
          RTS
          LDS.L       @R15+,MACL
	NOP
L425:                             
          .RES.W      1
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
_sp3SurfaceBright:               ; function: sp3SurfaceBright
                                 ; frame size=72
          MOV.L       R14,@-R15
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          MOV         R5,R13
          MOV.L       R11,@-R15
          MOV         #12,R11
          MOV.L       R10,@-R15
          MOV         R4,R10
          MOV.L       R9,@-R15
          EXTU.W      R10,R3
          MOV.L       R8,@-R15
          MOV         R6,R9
          STS.L       PR,@-R15
          MOV         R7,R8
          STS.L       MACL,@-R15
          ADD         #-36,R15
          CMP/PL      R3
          BF/S        L400
          MOV         #0,R14
L401:                             
          MOV         R15,R5
          ADD         #12,R5
          BSR         _sp3CoordTransSub
          MOV         R13,R4
          MOV         R15,R5
          EXTU.W      R14,R12
          MOV.L       @(12,R15),R2
          MUL.L       R11,R12
          NEG         R2,R2
          STS         MACL,R4
          MOV.L       R2,@(24,R15)
          MOV.L       @(16,R15),R3
          NEG         R3,R3
          MOV.L       R3,@(28,R15)
          MOV.L       @(20,R15),R3
          NEG         R3,R3
          MOV.L       R3,@(32,R15)
          BSR         _sp3NormalTrans
          ADD         R9,R4
          MOV         R12,R6
          MOV         R15,R5
          MOV         R15,R4
          ADD         R8,R6
          BSR         _sp3ComputeBrightness
          ADD         #24,R4
          ADD         #1,R14
          EXTU.W      R10,R3
          EXTU.W      R14,R2
          CMP/GE      R3,R2
          BF/S        L401
          ADD         #12,R13
L400:                             
          ADD         #36,R15
          LDS.L       @R15+,MACL
          LDS.L       @R15+,PR
          MOV.L       @R15+,R8
          MOV.L       @R15+,R9
          MOV.L       @R15+,R10
          MOV.L       @R15+,R11
          MOV.L       @R15+,R12
          MOV.L       @R15+,R13
          RTS
          MOV.L       @R15+,R14
;#####
_sp3CoordTrans:                  ; function: sp3CoordTrans
                                 ; frame size=32
          MOV.L       R14,@-R15
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          MOV.L       R11,@-R15
          MOV         R4,R12
          MOV.L       R10,@-R15
          MOV         #12,R11
          EXTU.W      R12,R3
          MOV         R6,R10
          MOV.L       R9,@-R15
          MOV         R5,R9
          STS.L       PR,@-R15
          STS.L       MACL,@-R15
          CMP/PL      R3
          BF/S        HL409
          MOV         #0,R14
HL410:                             
          EXTU.W      R14,R13
          MUL.L       R11,R13
          STS         MACL,R13
          MOV         R13,R5
          MOV         R13,R4
          ADD         R10,R5
          BSR         _sp3CoordTransSub
          ADD         R9,R4
          ADD         #1,R14
          EXTU.W      R12,R3
          EXTU.W      R14,R2
          CMP/GE      R3,R2
          BF          HL410
HL409:                             
          LDS.L       @R15+,MACL
          LDS.L       @R15+,PR
          MOV.L       @R15+,R9
          MOV.L       @R15+,R10
          MOV.L       @R15+,R11
          MOV.L       @R15+,R12
          MOV.L       @R15+,R13
          RTS
          MOV.L       @R15+,R14
;#####
_sp3CoordTransSub:               ; function: sp3CoordTransSub
                                 ; frame size=28
          MOV.L       L427,R7		; *Matx
          STS.L       MACL,@-R15
          MOV.L       @R7,R7		; Matx
;
	T123	0
	T123	16
	T123	32
;
          RTS
          LDS.L       @R15+,MACL
L427:                             
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
;####
_sp3VertBright:                  ; function: sp3VertBright
                                 ; frame size=48
          MOV.L       R14,@-R15
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          MOV.L       R11,@-R15
          MOV.L       R10,@-R15
          MOV         R6,R10
          MOV.L       R9,@-R15
          MOV         #0,R9
          MOV.L       R8,@-R15
          MOV         R4,R8
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
          EXTU.W      R8,R3
          ADD         #-16,R15
          MOV.L       L428+4,R12
          MOV.L       L428+8,R13
          MOV.L       R5,@R15
          CMP/PL      R3
          BF/S        L408
          EXTU.W      R9,R14
L409:                             
          EXTU.W      R14,R0
          MOV.W       L428,R2
          MOV.B       @(R0,R10),R3
          EXTU.B      R3,R3
          CMP/EQ      R2,R3
          BT          L410
          MOV         R15,R5
          EXTU.W      R14,R4
          MOV.L       @R15,R2
          ADD         #4,R5
          MOV         R4,R3
          SHLL2       R4
          SHLL2       R3
          SHLL        R3
          ADD         R3,R4
          BSR         _sp3NormalTrans
          ADD         R2,R4
;
	MOV	R15,R4
	ADD	#4,R4
	PROD	R12,R4,R11
;
          MOV.L       L428+12,R4
          MOV.L       L428+16,R3
          ADD         R11,R4
          SHLL2       R4
          JSR         @R3
          SHLL2       R4
          EXTS.W      R0,R4
          EXTS.W      R4,R2
          CMP/PZ      R2
          BT          L411
          EXTS.W      R9,R4
L411:                             
          EXTS.W      R4,R2
          MOV         #31,R3
          CMP/GT      R3,R2
          BF          L412
          MOV         #31,R4
L412:                             
          EXTU.W      R14,R0
          EXTU.B      R4,R4
          MOV.B       R4,@(R0,R10)
L410:                             
          ADD         #1,R14
          EXTU.W      R8,R2
          EXTU.W      R14,R3
          CMP/GE      R2,R3
          BF          L409
L408:                             
          ADD         #16,R15
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          MOV.L       @R15+,R8
          MOV.L       @R15+,R9
          MOV.L       @R15+,R10
          MOV.L       @R15+,R11
          MOV.L       @R15+,R12
          MOV.L       @R15+,R13
          RTS
          MOV.L       @R15+,R14
	NOP
L428:                             
          .DATA.W     H'00FF
          .RES.W      1
          .DATA.L     L275
          .DATA.L     _SPR_MULF
          .DATA.L     H'00010000
          .DATA.L     _SPR_FTOI
;####
_sp3NormalTrans:                 ; function: sp3NormalTrans
                                 ; frame size=32
          MOV.L       L429+2,R7		; *Matx
          STS.L       MACL,@-R15
          MOV.L       @R7,R7		; Matx
;
	N123	0
	N123	16
	N123	32
;
          RTS
          LDS.L       @R15+,MACL
L429:                             
          .RES.W      1
          .DATA.L     _sp3currentMatrix
          .DATA.L     _SPR_MULF
_sp3ComputeBrightness:           ; function: sp3ComputeBrightness
                                 ; frame size=28
          MOV.L       R14,@-R15
          MOV         R5,R14
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          MOV.L       R11,@-R15
          MOV         R4,R11
          MOV.L       R10,@-R15
          MOV         R6,R10
          MOV.L       R8,@-R15
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
          MOV.L       L430,R12
;
	PROD	R11,R14,R8
          CMP/PL      R8
          BF          L415
;
	PROD	R12,R14,R14
          MOV.L       L430+8,R4
          MOV.L       L430+12,R3
          ADD         R14,R4
          SHLL2       R4
          JSR         @R3
          SHLL2       R4
          EXTS.B      R0,R4
          EXTS.B      R4,R2
          CMP/PZ      R2
          BT          L416
          MOV         #0,R4
L416:                             
          EXTS.B      R4,R2
          MOV         #31,R3
          CMP/GT      R3,R2
          BF          L418
          BRA         L418
          MOV         #31,R4
L415:                             
          MOV         #-1,R4
L418:                             
          MOV.B       R4,@R10
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          MOV.L       @R15+,R8
          MOV.L       @R15+,R10
          MOV.L       @R15+,R11
          MOV.L       @R15+,R12
          MOV.L       @R15+,R13
          RTS
          MOV.L       @R15+,R14
L430:                             
          .DATA.L     L275
          .DATA.L     _SPR_MULF
          .DATA.L     H'00010000
          .DATA.L     _SPR_FTOI
          .SECTION    SEGA_D,DATA,ALIGN=4
L278:                            ; static: orgLightVect
          .DATA.L     H'00000000,H'00000000,H'FFFF0000
          .SECTION    SEGA_C,DATA,ALIGN=4
L279:                            ; static: sp3unitMatrix
          .DATA.L     H'00010000,H'00000000,H'00000000,H'00000000,H'00000000,H'00010000,H'00000000,H'00000000,H'00000000,H'00000000,H'00010000,H'00000000
          .SECTION    SEGA_B,DATA,ALIGN=4
L270:                            ; static: sp3matrixStack
          .RES.L      384
L271:                            ; static: sp3currentStackPt
          .RES.W      1
          .RES.W      1
_sp3currentMatrix:               ; static: sp3currentMatrix
          .RES.L      1
L273:                            ; static: lightAngle
          .RES.L      3
L274:                            ; static: worldLightVector
          .RES.L      3
L275:                            ; static: lightVector
          .RES.L      3
L276:                            ; static: viewPoint
          .RES.L      3
L277:                            ; static: viewAngle
          .RES.L      3
          .END

;   end of file
